﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;

namespace 课程设计  
{
    /// <summary>
    /// 公有类：用户（数据访问层）；
    /// </summary>
    public class UserDal
    {

        /// <summary>
        /// 公有静态方法：查询个数；
        /// </summary>
        /// <param name="user">用户</param>
        /// <returns>个数</returns>
        public static int SelectCount(User user)
        {
            string commandText = "usp_selectUserCount";                                         //指定SQL命令的命令文本；命令文本为存储过程名称；
            SqlParameter[] sqlParameters =                                                      //声明SQL参数数组；
                { new SqlParameter("@UserNo",user.UserNo)                                              //实例化SQL参数，并在构造函数中指定参数的名称、值，以作为SQL参数数组的元素；
                , new SqlParameter("@Password",user.Password) };
            int count =                                                                         //声明整型变量，用于保存与输入的用户相匹配的记录个数；
                (int)SqlHelper.Scalar(commandText,true, sqlParameters);
            return count;                                                                       //返回个数；
        }

        /// <summary>
        /// 公有静态方法：插入；
        /// </summary>
        /// <param name="user">用户</param>
        /// <returns>受影响行数</returns>
        public static int Insert(User user)
        {
            string commandText = "usp_insertUser";                                              //指定SQL命令的命令文本；命令文本为存储过程名称；
            SqlParameter[] sqlParameters =                                                      //声明SQL参数数组；
                { new SqlParameter("@UserNo", user.UserNo)                                              //实例化SQL参数，并在构造函数中指定参数的名称、值，以作为SQL参数数组的元素；
                    ,new SqlParameter("@Name", user.Name) 
                    , new SqlParameter("@Password", user.Password) };
  
            int rowAffected = 0;                                                                //声明整型变量，用于保存受影响行数；
            try                                                                                 //尝试；
            {
                rowAffected = SqlHelper.NonQuery(commandText, true , sqlParameters);             //调用SQL助手的静态方法NonQuery来插入新用户，并返回受影响行数；
            }
            catch (SqlException sqlEx)                                                          //捕捉SQL异常；
            {
                if (sqlEx.Number == 2627)                                                       //若异常的编号为2627，则违反实体完整性，即插入了主键重复的记录；
                {
                    user.IsDuplicate = true;                                                    //存在雷同用户；
                }
            }
            return rowAffected;                                                                 //返回受影响行数；
        }

        /// <summary>
        /// 公有静态方法：更新密码；
        /// </summary>
        /// <param name="user">用户</param>
        /// <returns>受影响行数</returns>
        public static int AlterPassword(User user)
        {
            string commandText = "usp_updateUserPassword";                                      //指定SQL命令的命令文本；命令文本为存储过程名称；
            SqlParameter[] sqlParameters =                                                      //声明SQL参数数组；
                { new SqlParameter("@UserNo", user.UserNo)                                              //实例化SQL参数，并在构造函数中指定参数的名称、值，以作为SQL参数数组的元素；
                , new SqlParameter("@NewPassword", user.Password) };

            int rowAffected = SqlHelper.NonQuery(commandText, true, sqlParameters);             //调用SQL助手的静态方法NonQuery来插入新用户，并返回受影响行数；                                                           //声明整型变量，用于保存受影响行数；
            return rowAffected;                                                                 //返回受影响行数；
        }
    }
}

